package br.com.controleVendas.controller;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.primefaces.context.RequestContext;

import br.com.controleVendas.config.HibernateUtil;
import br.com.controleVendas.dao.ParcelaVendaDao;
import br.com.controleVendas.dao.VendaDao;
import br.com.controleVendas.dao.VendaProdutoDao;
import br.com.controleVendas.entity.ParcelaVendaDto;
import br.com.controleVendas.entity.Venda;
import br.com.controleVendas.entity.VendaDto;
import br.com.controleVendas.entity.VendaProdutoDto;

@ManagedBean(name = "vendaFinalizadaCtrl")
@ViewScoped
public class VendaFinalizadaController
{

    List<VendaDto>          list = new ArrayList<>();

    private VendaDto        venda;

    VendaDao                dao  = null;

    private VendaProdutoDao vendaProdutoDao;

    private ParcelaVendaDao parcelaVendaDao;

    HttpSession             httpSession;

    public VendaFinalizadaController() throws Exception
    {
        dao = HibernateUtil.getInstance().getVendaDao();
        vendaProdutoDao = HibernateUtil.getInstance().getVendaProdutoDao();
        parcelaVendaDao = HibernateUtil.getInstance().getParcelaVendaDao();

        atualizaListagem();
        httpSession = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    }

    public void atualizaListagem()
        throws Exception
    {
        ParcelaVendaDto filtroParcela = new ParcelaVendaDto();
        filtroParcela.setVenda(new Venda());
        filtroParcela.setListCriterion(new ArrayList<Criterion>());
        filtroParcela.getListCriterion().add(Restrictions.isNotNull("venda.dtFechamento"));
        //filtroParcela.getListCriterion().add(Restrictions.eq("venda.flStatus", VendaDto.STATUS_PAGO));
        

        list = parcelaVendaDao.getListVendaWithParcela(filtroParcela);
        RequestContext.getCurrentInstance().update(":formVendaListar");
    }

    public void setVisualizar(VendaDto vendaDto)
        throws Exception
    {
        this.venda = new VendaDto();
        this.venda.setCdId(vendaDto.getCdId());
        this.venda = dao.getOne(this.venda);
        montarListVendaProduto(this.venda);

    }

    public void montarListVendaProduto(VendaDto venda)
    {
        try
        {
            VendaProdutoDto vendaProduto = new VendaProdutoDto();
            vendaProduto.setVenda(new Venda());
            vendaProduto.setListCriterion(new ArrayList<Criterion>());
            vendaProduto.getListCriterion().add(Restrictions.eq("venda.cdId", venda.getCdId()));
            venda.setListVendaProduto(vendaProdutoDao.getList(vendaProduto));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }

    public void setEditar(VendaDto vendaDto)
        throws Exception
    {
        this.venda = new VendaDto();
        this.venda.setCdId(vendaDto.getCdId());
        this.venda = dao.getOne(this.venda);

        httpSession.setAttribute("venda", this.venda);

    }

    public List<VendaDto> getList()
    {
        return list;
    }

    public VendaDto getVenda()
    {
        return venda;
    }

    public void setVenda(VendaDto venda)
    {
        this.venda = venda;
    }

}
